1. Field of the Invention
The present invention relates generally to the distribution of computer software, and more particularly to a method and apparatus for automated enforcement of computer software licenses.
2. Background Art
Some computer software programs use so-called "resource libraries" to provide part of their functionality. There is usually a license fee required to use a resource library. Under current schemes, it is not always possible to charge the license fee to all users of a resource library. This problem can be understood by comparing software structures that use resource libraries with basic software structures that do not.
Basic Software Structure
FIG. 1 illustrates a basic software structure. In the example of FIG. 1, the software comprises two layers. These layers are the operating system 110, and the application program 120. Operating system 110 is responsible for controlling the allocation and usage of hardware resources such as memory, central processing unit (CPU) time, disk space, and peripheral devices. Operating system 110 provides a variety of specific functions that can be utilized by a variety of software programs such as application program 120. Application program 120 provides specific end user functions, such as word processing, database management, and others. Application program 120 communicates with the computer hardware via functions provided by operating system 110. Operating system 110 provides an interface between hardware 100 and application program 120.
Resource Libraries
FIG. 2 illustrates a second software structure. The software structure of FIG. 2 contains an additional layer of software, resource library 215, interposed between application program 220 and operating system 110. Resource library 215 provides a pre-packaged set of resources or routines that can be accessed by software programs such as application program 220 during execution. These resources provide higher level functions than those provided by operating system 210. For example, these resources may provide routines for managing a graphical user interface, for communicating with other computers via a network, or for passing messages between program objects. Typically, resource library 215 provides one or more resources or functions that can be used by many different software programs. By using the prepackaged resources provided by resource library 215, a software program such as application program 220 can be made smaller and program development time can be shortened because the program itself need not include code to provide the functions provided by resource library 215.
In addition to application programs, resource libraries are used by other types of software programs, including device drivers, utility programs and other resource libraries.
Resource library 215 constitutes any set of one or more resources that exists separately from an application program or other software program and that can be used by more than one software program. For example, resource library 215 may comprise an application program interface (API), a toolkit, a framework, a resource library, a dynamic link library (DLL), an applet, or any other reusable resource, including an application program that can be accessed by another program (e.g. by using object linking and embedding (OLE)). Examples of resource libraries include Windows DLL's (DLL's used with the Microsoft Windows (TM) operating environment), the Apple Macintosh (TM) toolkit, the OpenStep API from NeXT Software, Inc., OLE enabled application programs such as Microsoft Word (TM), Java packages, and ActiveX applets.
A software program typically utilizes a resource provided by a resource library by sending an appropriate message to the resource library and supplying the parameters required for the resource to be executed. Assuming the appropriate parameters have been supplied, the resource executes, and an appropriate response message is returned to the requesting program.
A software program may use resources provided by several different resource libraries, a resource library may be used by several different programs, and a resource library may itself use other resource libraries. FIG. 3 illustrates a computer system that includes several programs and several resource libraries. In the example of FIG. 3, there are two application programs 300 and 310, and three resource libraries 320, 330, and 340. Application program 300 uses resources provided by operating system 110 and by resource libraries 320 and 330. Application program 310 uses resources provided by operating system 110 and by resource libraries 330 and 340. The resources of resource library 330 are thus shared by application programs 300 and 310.
License Fee
Generally, computer software is licensed to an end user for a fee. The end user pays a single purchase price or license fee in exchange for the right to use the end user program on a computer system. Resource libraries are often packaged or "bundled" with an end user program by the maker of the program such that the end user receives a copy of resource libraries required by a program when the end user buys a copy of the program. The price of the resource library is built into the end user program price. The end user program developer, in turn, pays a royalty to the resource library vendor for the right to bundle and resell the resource library.
Since a resource library can be used with multiple end user programs, once the end user receives a copy of the resource library, the end user can use the resource library with any other program that is compatible with the resource library. In this case, the resource library vendor receives no additional revenue when the vendor's resource library is used with additional programs. Accordingly, it would be desirable for a resource library vendor to be able to ensure that an end user can use the resource library only with programs for which a license fee has been paid to the vendor for use of the resource library. Thus there is a need for a software mechanism for enforcing software license agreements that automatically ensures that a resource library can only be used by programs that have been licensed for use with the resource library by the resource library vendor.